package tests;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

import junit.framework.TestCase;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import TecMaster.GDA;
import TecMaster.Equipamentos.*;
import TecMaster.Equipamentos.Equipamento.*;

public class TesteEquipamento extends TestCase {
	Tv e1;
	Computador e2;
	Dvd e3;
	AparelhoDeSom e4;
	VideoGame e5;
	GDA<Equipamento> gda = new GDA<Equipamento>();

	@Before
	public void setUp() throws Exception {
		e1 = new Tv(MarcasAutorizadas.LG, DefeitosMaisComuns.NAO_LIGA, "123",
				1, true, 7);
		e2 = new Computador(MarcasAutorizadas.SONY,
				DefeitosMaisComuns.SEM_SINAL_VIDEO, "125", 2, false, 2);
		e3 = new Dvd(MarcasAutorizadas.PHILIPS,
				DefeitosMaisComuns.SEM_SINAL_AUDIO, "124", 3, true, 5);
		e4 = new AparelhoDeSom(MarcasAutorizadas.SAMSUNG,
				DefeitosMaisComuns.DESLIGA_APOS_LIGAR, "134", 4, false, 3);
		e5 = new VideoGame(MarcasAutorizadas.SONY, DefeitosMaisComuns.NAO_LIGA,
				"154", 5, true, 2);
	}

	@Test
	public void testaDataDeChegada() {
		Calendar hoje = new GregorianCalendar();
		String dataHoje = new SimpleDateFormat("dd/MM/yyyy").format(hoje
				.getTime());
		String dataE1 = new SimpleDateFormat("dd/MM/yyyy").format(e1
				.getDataDeChegada().getTime());
		String dataE2 = new SimpleDateFormat("dd/MM/yyyy").format(e2
				.getDataDeChegada().getTime());
		assertEquals("Deveria ser a data de hoje", dataHoje, dataE1);
		assertEquals("Deveria ser a data de hoje", dataHoje, dataE2);
	}

	@Test
	public void testaSetEstado() {
		assertEquals("Erro no estado", EstadoDoEquipamento.NA_FILA, e1
				.getEstado());
		e1.setEstado(EstadoDoEquipamento.NO_TECNICO);
		assertEquals("Erro no estado", EstadoDoEquipamento.NO_TECNICO, e1
				.getEstado());
		e1.setEstado(EstadoDoEquipamento.CONSERTADO);
		assertEquals("Erro no estado", EstadoDoEquipamento.CONSERTADO, e1
				.getEstado());
		e1.setEstado(EstadoDoEquipamento.SEM_CONSERTO);
		assertEquals("Erro no estado", EstadoDoEquipamento.SEM_CONSERTO, e1
				.getEstado());
	}

	@Test
	public void testeEquals() throws Exception {
		assertFalse("objetos deveriam ser diferentes", e4.equals(e1));
		Equipamento e6 = new Tv(MarcasAutorizadas.LG,
				DefeitosMaisComuns.NAO_LIGA, "123", 1, true, 7);
		assertTrue("objetos deveriam ser iguais", e6.equals(e1));
	}
	

	@Test
	public void testaToString() throws FileNotFoundException, IOException, ClassNotFoundException {
		Calendar hoje = new GregorianCalendar();
		Calendar dataSaida = new GregorianCalendar();

		dataSaida.add(Calendar.DAY_OF_YEAR, +14);

		Assert
				.assertEquals(
						"Erro no toString",
						"Equipamento: TV, Marca: LG, Defeito: NAO_LIGA, Data De Chegada: "
								+ new SimpleDateFormat("dd/MM/yyyy")
										.format(hoje.getTime())
								+ ", Data De Saida: "
								+ new SimpleDateFormat("dd/MM/yyyy")
										.format(dataSaida.getTime())
								+ ", Numero de nota fiscal: 123, Codigo: 000001, Garantia: Sim",
						e1.toString());
		gda.resetarCadastros();
	}

}
